module.exports = {
  hubs: [],

  /**
   * 订阅者
   * @param {*} fun 方法
   * @param {*} self 实例
   */
  listener(fun, self) {
    this.hubs.push({ key: fun.name, fun, self });
  },

  /**
   * 发布者
   * @param {*} key 监听对象
   * @param {*} newVal 新的值
   * @param {*} oldVal 旧的值
   */
  subscriber(key, newVal, oldVal) {
    this.hubs.filter(o => o.key === key).forEach(o => {
      try {
        o.fun.call(o.self, newVal, oldVal);
      } catch (error) {
        console.error(error);
      }
    })
  }
}